home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: Alpha / Whiteline Alpha.iso / progtool / pascal / o_gem / units / ostdwnds.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1994-09-22  |  15.9 KB  |  693 lines

  1. {**************************************
  2.  *  O b j e c t G E M   Version 1.17  *
  3.  *  Copyright 1992-94 by Thomas Much  *
  4.  **************************************
  5.  *       Unit  O S T D W N D S        *
  6.  **************************************
  7.  *    Softdesign Computer Software    *
  8.  *    Thomas Much, Gerwigstraße 46,   *
  9.  *  76131 Karlsruhe, (0721) 62 28 41  *
  10.  *         Thomas Much @ KA2          *
  11.  *  UK48@ibm3090.rz.uni-karlsruhe.de  *
  12.  **************************************
  13.  *    erstellt am:        03.03.1994  *
  14.  *    letztes Update am:  31.07.1994  *
  15.  **************************************}
  16.  
  17. {
  18.   WICHTIGE ANMERKUNGEN ZUM QUELLTEXT:
  19.  
  20.   ObjectGEM wird mit dem _vollständigen_ Quelltext ausgeliefert, d.h.
  21.   jeder kann sich die Unit selbst compilieren, womit die extrem lästigen
  22.   Kompatibilitätsprobleme mit den PP-Releases beseitigt sind.
  23.   ObjectGEM ist und bleibt aber trotzdem SHAREWARE, d.h. wer die Biblio-
  24.   thek regelmäßig benutzt, muß sich REGISTRIEREN lassen. Dafür gibt es
  25.   die neueste Version und - gegen einen geringen Aufpreis - auch ein
  26.   gedrucktes Handbuch.
  27.  
  28.   WICHTIG: Wer den Quelltext verändert und dann Probleme beim Compilieren,
  29.   Ausführen o.ä. hat, kann nicht damit rechnen, daß ich den Fehler suche;
  30.   tritt der Fehler allerdings auch mit dem Original-Quelltext auf, würde
  31.   ich mich über eine genaue Fehlerbeschreibung freuen. Veränderte Quell-
  32.   texte dürfen _nicht_ weitergegeben werden, dies wäre ein Verstoß gegen
  33.   das Copyright!
  34.  
  35.   Wer beim Durchstöbern des Textes auf vermeintliche Fehler oder verbesse-
  36.   rungswürdige Stellen trifft (von letzterem gibt es sicherlich noch viele),
  37.   kann mir dies gerne mitteilen - ich habe auch ich nichts gegen kostenlos
  38.   zur Verfügung gestellte optimierte Routinen (sofern sich jemand die Mühe
  39.   macht). Wer in anderen Projekten, die nicht in direkter Konkurrenz zu
  40.   ObjectGEM stehen, einzelne Routinen verwenden möchte, wendet sich bitte
  41.   an mich (ein solcher Austausch sollte kein Problem sein).
  42.  
  43.   Wer sich auf nicht dokumentierte "implementation"- oder "private"-Eigen-
  44.   schaften verläßt, darf sich nicht über Inkompatibilitäten zu späteren
  45.   Versionen wundern; wer meint, eine Dokumentationslücke entdeckt zu haben,
  46.   kann mir dies gerne mitteilen.
  47.  
  48.   Kleine Info zum Schluß: Als "default tabsize" verwende ich 2. Wer drei
  49.   Punkte ("...") im Quelltext entdeckt, hat eine Stelle gefunden, an der
  50.   ich z.Z. arbeite ;-)
  51.  
  52.   "Möge die OOP mit Euch sein!"
  53. }
  54.  
  55.  
  56. {$IFDEF DEBUG}
  57.     {$B+,D+,G-,I-,L+,N-,P-,Q+,R+,S+,T-,V-,X+,Z+}
  58. {$ELSE}
  59.     {$B+,D-,G-,I-,L-,N-,P-,Q-,R-,S-,T-,V-,X+,Z+}
  60. {$ENDIF}
  61.  
  62. unit OStdWnds;
  63.  
  64. interface
  65.  
  66. uses
  67.  
  68.     Strings,Tos,Gem,Printer,Objects,OTypes,OProcs,OWindows;
  69.  
  70. type
  71.  
  72.     PTextWindow      = ^TTextWindow;
  73.     TTextWindow      = object(TWindow)
  74.         public
  75.         Lines   : PStrCollection;
  76.         FontID,
  77.         FontSize,
  78.         Color,
  79.         TabSize : integer;
  80.         RealTabs: boolean;
  81.         constructor Init(AParent: PWindow; ATitle: string; InitLines,ADelta: integer);
  82.         destructor Done; virtual;
  83.         function GetStyle: integer; virtual;
  84.         function GetScroller: PScroller; virtual;
  85.         procedure GetWindowClass(var AWndClass: TWndClass); virtual;
  86.         function GetClassName: string; virtual;
  87.         procedure InitPaint; virtual;
  88.         procedure Paint(var PaintInfo: TPaintStruct); virtual;
  89.         procedure ExitPaint; virtual;
  90.         function WMKeyDown(Stat,Key: integer): boolean; virtual;
  91.         procedure AddLine(NewLine: string); virtual;
  92.         procedure InsertLine(Index: longint; NewLine: string); virtual;
  93.         procedure DeleteLine(LineNumber: integer); virtual;
  94.         function GetLine(LineNumber: integer): string; virtual;
  95.         function GetLineLength(LineNumber: integer): integer; virtual;
  96.         function GetNumLines: integer; virtual;
  97.         procedure Cut; virtual;
  98.         procedure Copy; virtual;
  99.         procedure Paste; virtual;
  100.         procedure SelectAll; virtual;
  101.         procedure Print; virtual;
  102.         procedure InitPrint; virtual;
  103.         procedure ExitPrint; virtual;
  104.         procedure Read(AFileName: string); virtual;
  105.         procedure Clear; virtual;
  106.         procedure SetFont(NewID,NewSize: integer); virtual;
  107.         procedure UpdateSubTitle; virtual;
  108.         function TabXpand(s: string): string; virtual;
  109.         function PrintFilter(s: string): string; virtual;
  110.         private
  111.         attrib: ARRAY_10;
  112.         fcw,
  113.         fch,
  114.         tfx,
  115.         wrm   : integer
  116.     end;
  117.  
  118.     PEditWindow      = ^TEditWindow;
  119.     TEditWindow      = object(TTextWindow)
  120.         public
  121.         { ... }
  122.         function GetClassName: string; virtual;
  123.     end;
  124.  
  125.     PFileWindow      = ^TFileWindow;
  126.     TFileWindow      = object(TEditWindow)
  127.         public
  128.         { ... }
  129.         function GetClassName: string; virtual;
  130.     end;
  131.  
  132.     PHelpWindow      = ^THelpWindow;
  133.     THelpWindow      = object(TFileWindow)
  134.         public
  135.         { ... }
  136.         function GetClassName: string; virtual;
  137.     end;
  138.  
  139.     PIndicatorWindow = ^TIndicatorWindow;
  140.     TIndicatorWindow = object(TDialog)
  141.         public
  142.         { ... }
  143.         function GetClassName: string; virtual;
  144.     end;
  145.  
  146.  
  147.  
  148. implementation
  149.  
  150.  
  151. { *** Objekt TTEXTWINDOW *** }
  152.  
  153. constructor TTextWindow.Init(AParent: PWindow; ATitle: string; InitLines,ADelta: integer);
  154.  
  155.     begin
  156.         if not(inherited Init(AParent,ATitle)) then fail;
  157.         if Scroller=nil then
  158.             begin
  159.                 inherited Done;
  160.                 fail
  161.             end;
  162.         new(Lines,Init(InitLines,ADelta));
  163.         if Lines=nil then
  164.             begin
  165.                 inherited Done;
  166.                 fail
  167.             end;
  168.         Attr.ExStyle:=Attr.ExStyle or ws_ex_ReadOnly;
  169.         TabSize:=2;
  170.         RealTabs:=true;
  171.         UpdateSubTitle
  172.     end;
  173.  
  174.  
  175. destructor TTextWindow.Done;
  176.  
  177.     begin
  178.         if Lines<>nil then dispose(Lines,Done);
  179.         inherited Done
  180.     end;
  181.  
  182.  
  183. function TTextWindow.GetStyle: integer;
  184.  
  185.     begin
  186.         GetStyle:=(inherited GetStyle and not(INFO)) or SLIDER
  187.     end;
  188.  
  189.  
  190. function TTextWindow.GetScroller: PScroller;
  191.     var dummy: string[33];
  192.  
  193.     begin
  194.         GetScroller:=new(PScroller,Init(@self,1,1,1,1));
  195.         if Scroller=nil then exit;
  196.         with Scroller^ do Style:=Style or scs_BitbltScrolling;
  197.         SetFont(vqt_name(vdiHandle,1,dummy),10);
  198.         Color:=Black
  199.     end;
  200.  
  201.  
  202. procedure TTextWindow.GetWindowClass(var AWndClass: TWndClass);
  203.  
  204.     begin
  205.         inherited GetWindowClass(AWndClass);
  206.         with AWndClass do
  207.             begin
  208.                 Style:=Style and not(cs_QuitOnClose) or cs_ByteAlignClient;
  209.                 hCursor:=TEXT_CRSR
  210.             end
  211.     end;
  212.  
  213.  
  214. function TTextWindow.GetClassName: string;
  215.  
  216.     begin
  217.         GetClassName:='TextWindow'
  218.     end;
  219.  
  220.  
  221. procedure TTextWindow.InitPaint;
  222.     var dummy: integer;
  223.  
  224.     begin
  225.         vqt_attributes(vdiHandle,attrib);
  226.         tfx:=GP.teffects;
  227.         wrm:=GP.wrmode;
  228.         gem.vst_font(vdiHandle,FontID);
  229.         gem.vst_point(vdiHandle,FontSize,dummy,dummy,dummy,dummy);
  230.         gem.vst_alignment(vdiHandle,TA_LEFT,TA_TOP,dummy,dummy);
  231.         gem.vst_color(vdiHandle,Color);
  232.         gem.vst_rotation(vdiHandle,0);
  233.         gem.vst_effects(vdiHandle,TF_NORMAL);
  234.         gem.vswr_mode(vdiHandle,MD_REPLACE)
  235.     end;
  236.  
  237.  
  238. procedure TTextWindow.Paint(var PaintInfo: TPaintStruct);
  239.     var q,bis: longint;
  240.  
  241.     begin
  242.         if Lines^.Count=0 then exit;
  243.         bis:=Scroller^.YPos+Scroller^.YPage;
  244.         if bis>=Lines^.Count then bis:=Lines^.Count-1;
  245.         for q:=Scroller^.YPos to bis do
  246.             v_gtext(vdiHandle,Scroller^.GetXOrg,Scroller^.GetYOrg+q*fch,TabXpand(StrPas(Lines^.At(q))))
  247.         { ... }
  248.     end;
  249.  
  250.  
  251. procedure TTextWindow.ExitPaint;
  252.     var dummy: integer;
  253.  
  254.     begin
  255.         gem.vst_font(vdiHandle,attrib[0]);
  256.         gem.vst_height(vdiHandle,attrib[7],dummy,dummy,dummy,dummy);
  257.         gem.vst_alignment(vdiHandle,attrib[3],attrib[4],dummy,dummy);
  258.         gem.vst_color(vdiHandle,attrib[1]);
  259.         gem.vst_rotation(vdiHandle,attrib[2]);
  260.          gem.vst_effects(vdiHandle,tfx);
  261.         gem.vswr_mode(vdiHandle,wrm)
  262.     end;
  263.  
  264.  
  265. function TTextWindow.WMKeyDown(Stat,Key: integer): boolean;
  266.     label _repon;
  267.  
  268.     var conterm : byte absolute $484;
  269.         oldct   : byte;
  270.         oldstack: longint;
  271.  
  272.     begin
  273.         if Super(pointer(1))=0 then oldstack:=Super(nil)
  274.     else
  275.         oldstack:=0;
  276.     oldct:=conterm and 2;
  277.     conterm:=conterm and not(2);
  278.     if oldstack<>0 then Super(pointer(oldstack));
  279.         if Stat=K_NORMAL then
  280.             begin
  281.                 WMKeyDown:=true;
  282.                 case Key of
  283.                 Home:
  284.                     Scroller^.ScrollTo(0,0);
  285.                 Cur_Up:
  286.                     Scroller^.ScrollBy(0,-1);
  287.                 Cur_Down:
  288.                     Scroller^.ScrollBy(0,1);
  289.                 Cur_Left:
  290.                     Scroller^.ScrollBy(-1,0);
  291.                 Cur_Right:
  292.                     Scroller^.ScrollBy(1,0)
  293.                 else
  294.                     WMKeyDown:=false
  295.                 end;
  296.                 goto _repon
  297.             end;
  298.         if (Stat and K_SHIFT)>0 then
  299.             begin
  300.                 WMKeyDown:=true;
  301.                 case Key of
  302.                 Shift_Home:
  303.                     Scroller^.ScrollTo(0,Scroller^.YRange);
  304.                 Shift_CU:
  305.                     Scroller^.ScrollBy(0,-Scroller^.YPage);
  306.                 Shift_CD:
  307.                     Scroller^.ScrollBy(0,Scroller^.YPage);
  308.                 Shift_CL:
  309.                     Scroller^.ScrollBy(-Scroller^.XPage,0);
  310.                 Shift_CR:
  311.                     Scroller^.ScrollBy(Scroller^.XPage,0)
  312.                 else
  313.                     WMKeyDown:=false
  314.                 end;
  315.                 goto _repon
  316.             end;
  317.         WMKeyDown:=false;
  318.         _repon:
  319.         if Super(pointer(1))=0 then oldstack:=Super(nil)
  320.     else
  321.         oldstack:=0;
  322.     conterm:=conterm or oldct;
  323.     if oldstack<>0 then Super(pointer(oldstack))
  324.     end;
  325.  
  326.  
  327. procedure TTextWindow.AddLine(NewLine: string);
  328.     var xr: integer;
  329.  
  330.     begin
  331.         Lines^.AtInsert(Lines^.Count,ChrNew(NewLine));
  332.         { ... }
  333.         UpdateSubTitle;
  334.         if length(TabXpand(NewLine))>=Scroller^.XRange then xr:=length(TabXpand(NewLine))+1
  335.         else
  336.             xr:=Scroller^.XRange;
  337.         Scroller^.SetRange(xr,Scroller^.YRange+1);
  338.         Scroller^.ScrollTo(0,Lines^.Count);
  339.         ForceRedraw
  340.     end;
  341.  
  342.  
  343. procedure TTextWindow.InsertLine(Index: longint; NewLine: string);
  344.     var xr: integer;
  345.  
  346.     begin
  347.         if Index<0 then Index:=0;
  348.         if Index>Lines^.Count then Index:=Lines^.Count;
  349.         Lines^.AtInsert(Index,ChrNew(NewLine));
  350.         { ... }
  351.         UpdateSubTitle;
  352.         if length(TabXpand(NewLine))>=Scroller^.XRange then xr:=length(TabXpand(NewLine))+1
  353.         else
  354.             xr:=Scroller^.XRange;
  355.         Scroller^.SetRange(xr,Scroller^.YRange+1);
  356.         Scroller^.ScrollTo(0,Index);
  357.         ForceRedraw
  358.     end;
  359.  
  360.  
  361. procedure TTextWindow.DeleteLine(LineNumber: integer);
  362.  
  363.     begin
  364.         if (LineNumber>=0) and (LineNumber<Lines^.Count) then Lines^.AtFree(LineNumber);
  365.         { ... }
  366.         UpdateSubTitle;
  367.         Scroller^.SetRange(Scroller^.XRange,Scroller^.YRange-1);
  368.         ForceRedraw
  369.     end;
  370.  
  371.  
  372. function TTextWindow.GetLine(LineNumber: integer): string;
  373.     var p: PChar;
  374.  
  375.     begin
  376.         GetLine:='';
  377.         if (LineNumber>=0) and (LineNumber<Lines^.Count) then
  378.             begin
  379.                 p:=Lines^.At(LineNumber);
  380.                 if p<>nil then GetLine:=StrPas(p)
  381.             end
  382.     end;
  383.  
  384.  
  385. function TTextWindow.GetLineLength(LineNumber: integer): integer;
  386.  
  387.     begin
  388.         GetLineLength:=length(GetLine(LineNumber))
  389.     end;
  390.  
  391.  
  392. function TTextWindow.GetNumLines: integer;
  393.  
  394.     begin
  395.         GetNumLines:=Lines^.Count
  396.     end;
  397.  
  398.  
  399. procedure TTextWindow.Cut;
  400.  
  401.     begin
  402.         if Clipboard=nil then exit;
  403.         with Clipboard^ do
  404.             begin
  405.                 { ... }
  406.             end
  407.     end;
  408.  
  409.  
  410. procedure TTextWindow.Copy;
  411.  
  412.     begin
  413.         if Clipboard=nil then exit;
  414.         with Clipboard^ do
  415.             begin
  416.                 { ... }
  417.             end
  418.     end;
  419.  
  420.  
  421. procedure TTextWindow.Paste;
  422.     var ext     : string;
  423.         xr,yr,op: integer;
  424.         f       : text;
  425.  
  426.     begin
  427.         if bTst(Attr.ExStyle,ws_ex_ReadOnly) then
  428.             begin
  429.                 ext:=GetTitle;
  430.                 if length(ext)>0 then ext:='"'+ext+'"|';
  431.                 if (Application^.Attr.Country=FRG) or (Application^.Attr.Country=SWG) then
  432.                     Application^.Alert(@self,1,NOTE,ext+'Dieser Text ist schreibgeschützt.','  &OK  ')
  433.                 else
  434.                     Application^.Alert(@self,1,NOTE,ext+'This text is read-only.','  &OK  ');
  435.                 exit
  436.             end;
  437.         if Clipboard=nil then exit;
  438.         with Clipboard^ do
  439.             begin
  440.                 if not(OpenClipboard(false)) then exit;
  441.                 ext:=GetPriorityClipboardFormat('TXT.ASC');
  442.                 if length(ext)>0 then
  443.                     begin
  444.                         assign(f,GetClipboardFilename+ext);
  445.                         reset(f);
  446.                         xr:=Scroller^.XRange;
  447.                         yr:=Scroller^.YRange;
  448.                         op:=Lines^.Count;
  449.                         while not(eof(f)) do
  450.                             begin
  451.                                 readln(f,ext);
  452.                                 Lines^.AtInsert(Lines^.Count,ChrNew(ext));
  453.                                 if length(TabXpand(ext))>=xr then xr:=length(TabXpand(ext))+1;
  454.                                 inc(yr)
  455.                             end;
  456.                         close(f);
  457.                         UpdateSubTitle;
  458.                         Scroller^.SetRange(xr,yr);
  459.                         Scroller^.ScrollTo(0,op);
  460.                         ForceRedraw
  461.                     end;
  462.                 CloseClipboard
  463.             end
  464.     end;
  465.  
  466.  
  467. procedure TTextWindow.SelectAll;
  468.  
  469.     begin
  470.         { ... }
  471.     end;
  472.  
  473.  
  474. procedure TTextWindow.Print;
  475.     label _nochmal;
  476.  
  477.     var q  : longint;
  478.         ext: string;
  479.  
  480.     begin
  481.         if GetNumLines=0 then exit;
  482.         ext:=GetTitle;
  483.         if length(ext)>0 then ext:='"'+ext+'"|';
  484.         if Application^.Attr.Country in [FRG,SWG] then
  485.             begin
  486.                 if Application^.Alert(@self,1,WAIT,ext+'Den ganzen Text ausdrucken?','  &Ja  | &Nein ')<>1 then exit
  487.             end
  488.         else
  489.             if Application^.Alert(@self,1,WAIT,ext+'Print whole text?',' &Yes |  &No  ')<>1 then exit;
  490.         _nochmal:
  491.         if Cprnos=0 then
  492.             begin
  493.                 if Application^.Attr.Country in [FRG,SWG] then
  494.                     begin
  495.                         if Application^.Alert(@self,1,STOP,'Der Drucker ist nicht bereit.','&Nochmal|&Abbruch')=1 then goto _nochmal
  496.                     end
  497.                 else
  498.                     if Application^.Alert(@self,1,STOP,'Printer not responding.','&Retry|&Cancel')=1 then goto _nochmal;
  499.                 exit
  500.             end;
  501.         BusyMouse;
  502.         InitPrint;
  503.         for q:=0 to GetNumLines-1 do writeln(lst,PrintFilter(TabXpand(GetLine(q))));
  504.         ExitPrint;
  505.         ArrowMouse
  506.     end;
  507.  
  508.  
  509. procedure TTextWindow.InitPrint;
  510.  
  511.     begin
  512.     end;
  513.  
  514.  
  515. procedure TTextWindow.ExitPrint;
  516.  
  517.     begin
  518.         write(lst,chr(FF),chr(BEL))
  519.     end;
  520.  
  521.  
  522. procedure TTextWindow.Read(AFileName: string);
  523.     var f       : text;
  524.         zeile   : string;
  525.         xr,yr,op: integer;
  526.  
  527.     begin
  528.         if not(Exist(AFileName)) then exit;
  529.         graf_mouse(IDC_LOAD,nil);
  530.         assign(f,AFileName);
  531.         reset(f);
  532.         xr:=Scroller^.XRange;
  533.         yr:=Scroller^.YRange;
  534.         op:=Lines^.Count;
  535.         while not(eof(f)) do
  536.             begin
  537.                 readln(f,zeile);
  538.                 Lines^.AtInsert(Lines^.Count,ChrNew(zeile));
  539.                 if length(TabXpand(zeile))>=xr then xr:=length(TabXpand(zeile))+1;
  540.                 inc(yr)
  541.             end;
  542.         close(f);
  543.         LastMouse;
  544.         UpdateSubTitle;
  545.         Scroller^.SetRange(xr,yr);
  546.         Scroller^.ScrollTo(0,op);
  547.         ForceRedraw
  548.     end;
  549.  
  550.  
  551. procedure TTextWindow.Clear;
  552.  
  553.     begin
  554.         Lines^.FreeAll;
  555.         UpdateSubTitle;
  556.         Scroller^.SetRange(0,0);
  557.         ForceRedraw
  558.     end;
  559.  
  560.  
  561. procedure TTextWindow.SetFont(NewID,NewSize: integer);
  562.     var dummy: integer;
  563.         atrb : ARRAY_10;
  564.  
  565.     begin
  566.         vqt_attributes(vdiHandle,atrb);
  567.         FontID:=gem.vst_font(vdiHandle,NewID);
  568.         FontSize:=gem.vst_point(vdiHandle,NewSize,dummy,dummy,fcw,fch);
  569.         gem.vst_font(vdiHandle,atrb[0]);
  570.         gem.vst_height(vdiHandle,atrb[7],dummy,dummy,dummy,dummy);
  571.         Scroller^.SetUnits(fcw,fch)
  572.     end;
  573.  
  574.  
  575. procedure TTextWindow.UpdateSubTitle;
  576.     var n: longint;
  577.  
  578.     begin
  579.         n:=GetNumLines;
  580.         if Application^.Attr.Country in [FRG,SWG] then
  581.             begin
  582.                 if n=1 then SetSubTitle(' 1 Zeile')
  583.                 else
  584.                     SetSubTitle(' '+ltoa(n)+' Zeilen')
  585.             end
  586.         else
  587.             begin
  588.                 if n=1 then SetSubTitle(' 1 line')
  589.                 else
  590.                     SetSubTitle(' '+ltoa(n)+' lines')
  591.             end
  592.     end;
  593.  
  594.  
  595. function TTextWindow.TabXpand(s: string): string;
  596.     var t: integer;
  597.  
  598.     begin
  599.         if RealTabs then
  600.             begin
  601.                 t:=pos(chr(HT),s);
  602.                 while t>0 do
  603.                     begin
  604.                         if TabSize>1 then
  605.                             s:=StrPLeft(s,t-1)+StrPSpace(TabSize-((t-1) mod TabSize))+StrPRight(s,length(s)-t)
  606.                         else
  607.                             s[t]:=' ';
  608.                         t:=pos(chr(HT),s)
  609.                     end
  610.             end;
  611.         TabXpand:=s
  612.     end;
  613.  
  614.  
  615. function TTextWindow.PrintFilter(s: string): string;
  616.  
  617.     procedure replace(i,o: char);
  618.         var p: integer;
  619.  
  620.         begin
  621.             p:=pos(i,s);
  622.             while p>0 do
  623.                 begin
  624.                     s[p]:=o;
  625.                     p:=pos(i,s)
  626.                 end
  627.         end;
  628.  
  629.     begin
  630.         replace('ß',#225);
  631.         replace('§',#21);
  632.         replace('|',#179);
  633. {        replace('~',#);
  634.         replace('[',#);
  635.         replace(']',#);
  636.         replace('@',#);
  637.         replace(#123,#);
  638.         replace(#125,#);
  639.         replace('\',#); ... }
  640.         PrintFilter:=s
  641.     end;
  642.  
  643. { *** TTEXTWINDOW *** }
  644.  
  645.  
  646.  
  647. { *** Objekt TEDITWINDOW *** }
  648.  
  649. function TEditWindow.GetClassName: string;
  650.  
  651.     begin
  652.         GetClassName:='EditWindow'
  653.     end;
  654.  
  655. { *** TEDITWINDOW *** }
  656.  
  657.  
  658.  
  659. { *** Objekt TEDITWINDOW *** }
  660.  
  661. function TFileWindow.GetClassName: string;
  662.  
  663.     begin
  664.         GetClassName:='FileWindow'
  665.     end;
  666.  
  667. { *** TEDITWINDOW *** }
  668.  
  669.  
  670.  
  671. { *** Objekt THELPWINDOW *** }
  672.  
  673. function THelpWindow.GetClassName: string;
  674.  
  675.     begin
  676.         GetClassName:='HelpWindow'
  677.     end;
  678.  
  679. { *** THELPWINDOW *** }
  680.  
  681.  
  682.  
  683. { *** Objekt TINDICATORWINDOW *** }
  684.  
  685. function TIndicatorWindow.GetClassName: string;
  686.  
  687.     begin
  688.         GetClassName:='IndicatorWindow'
  689.     end;
  690.  
  691. { *** TINDICATORWINDOW *** }
  692.  
  693. end.